/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Datos.DB;

import Datos.Operador;
import Datos.Persona;
import Excepciones.ActualizarDatosOperadorException;
import Excepciones.BuscarDatosOperadorException;
import Excepciones.BuscarDatosAdministradorException;
import Excepciones.GuardarDatosOperadorException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class OperadorDB {

public void grabarOperador(Operador op) throws SQLException, GuardarDatosOperadorException{
    grabarPersona(op);
    grabarOperadorTabla(op);
    grabarUsuario(op);
    grabarPersonaUsuario(op);
    
}
private boolean grabarPersona(Operador op) throws SQLException, GuardarDatosOperadorException {
    try{
        OperacionesBase db = new OperacionesBase();
        
        String query = "insert into persona(cedula, nombre, direccion, telefono) " +
                "values('"+op.getCedula()+"', '"+op.getNombre()+"', '" + 
                op.getDireccion() +"', '"+op.getTelefono() +"');";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    } catch (SQLException ex) {
       System.out.println(ex.getMessage());
       throw new GuardarDatosOperadorException("Error encontrado al buscar el Operador");
    } 
}

private boolean grabarUsuario(Operador op) throws SQLException, GuardarDatosOperadorException {
    try {
        OperacionesBase db = new OperacionesBase();
        
        String query = "insert into usuario(nick, clave) " +
                "values('"+op.getUsuario().getNombreUsuario()+"', '"+op.getUsuario().getContraseña() + "' );";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    } catch (SQLException ex) {
       System.out.println(ex.getMessage());
       throw new GuardarDatosOperadorException("Error encontrado al buscar el Operador");
    } 
}

private boolean grabarPersonaUsuario(Operador op) throws SQLException, GuardarDatosOperadorException {
    try {
        OperacionesBase db = new OperacionesBase();
        
        String query = "insert into personausuario(idpersona, idusuariop) " +
                "values('"+op.getCedula()+"', '"+op.getUsuario().getNombreUsuario()+ "' );";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    } catch (SQLException ex) {
       System.out.println(ex.getMessage());
       throw new GuardarDatosOperadorException("Error encontrado al buscar el Operador");
    } 
}

private boolean grabarOperadorTabla(Operador op) throws SQLException, GuardarDatosOperadorException {
    try {
        OperacionesBase db = new OperacionesBase();
        
        String query = "insert into operador(cedula) values('"+op.getCedula()+"')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    } catch (SQLException ex) {
       System.out.println(ex.getMessage());
       throw new GuardarDatosOperadorException("Error encontrado al buscar el Operador");
    } 
}


public int modificar(Operador ad) throws SQLException, ActualizarDatosOperadorException {
    try {
        OperacionesBase db = new OperacionesBase();
        String query="update persona set nombre='" + ad.getNombre() + "', direccion='" + ad.getDireccion()+ "', telefono='"+ad.getTelefono()+"' where persona.cedula='"+ad.getCedula()+"'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
        throw new ActualizarDatosOperadorException("Error encontrado al buscar el Operador");
   } 
}


public Operador buscar(String nick) throws SQLException, BuscarDatosOperadorException {
    try {
        OperacionesBase db = new OperacionesBase();
        String query="select * from usuario where nick ='" + nick+"'";  
        ResultSet resultado = db.seleccion(query);
        Operador op =new Operador();
        if (resultado!=null) {
            resultado.next();
            op.getUsuario().setNombreUsuario(resultado.getString(1));
            op.getUsuario().setContraseña(resultado.getString(2));
        } 
        query="select persona.cedula, persona.nombre, persona.direccion, persona.telefono from personausuario,persona where personausuario.idusuariop='" + nick +"' and personausuario.idpersona=persona.cedula";
        resultado = db.seleccion(query);
        if (resultado!=null) {
            resultado.next();
            op.setCedula(resultado.getString(1));
            op.setNombre(resultado.getString(2));
            op.setDireccion(resultado.getString(3));
            op.setTelefono(resultado.getString(4));
        } 
        query="select * from operador where cedula ='" + op.getCedula()+"'";
        resultado = db.seleccion(query);
        if (resultado!=null) {
            resultado.next();
            op.setCedula(resultado.getString(1));
        } 
        db.cerrarConexion();
        return op;
    } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            throw new BuscarDatosOperadorException("Error encontrado al buscar el Administrador");
        }  
        
}
    
    public ArrayList listar() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="select persona.cedula, persona.nombre, persona.direccion, persona.telefono from persona,operador where persona.cedula=operador.cedula ";
        ResultSet resultado = db.seleccion(query);
        Persona per=null;
        ArrayList personas=new ArrayList();
        while (resultado.next()) {
            per=new Persona();
            per.setCedula(resultado.getString(1));
            per.setNombre(resultado.getString(2));
            per.setDireccion(resultado.getString(3));
            per.setTelefono(resultado.getString(4));
            personas.add(per);
        }
        db.cerrarConexion();
        return personas;
    }
       
}

